Memristors are devices that can be programmed to different resistive states by applying a programming energy, such as a voltage. After programming, the state of the memristor can be read and remains stable over a specified time period. Thus, memristors can be used to store digital data. For example, a high resistance state can represent a digital “0” and a low resistance state can represent a digital “1” (or vice versa). Large crossbar arrays of memristive elements can be used in a variety of applications, including random access memory, non-volatile solid state memory, programmable logic, signal processing control systems, pattern recognition, and other applications.